草庐IT

TypeScript 运算符

全部标签

无法在 Visual Studio 2012 中编译但在 Visual Studio 2005 中运行良好的 C++ 类型转换运算符代码

我正在尝试更新一个使用visualstudio2005构建的旧项目以使用visualstudio2012,但我遇到了一个我无法解决的错误。在VS2005下运行良好的代码:#include#include#includeusingstd::cout;usingstd::wcout;usingstd::endl;usingstd::wstring;usingstd::string;classValue{public:Value(constwstring&value){v=value;}Value(Value&other){this->v=other.v;}templateoperatorT

c++ - Visual C++ - 显式调用基本类型的转换运算符

我正在研究一个Foo类,它定义了一个隐式的operatorbool()。我使用Foo作为几个函数的返回类型,所以我可以获得有关已完成的操作的信息并调用Foo::operatorbool()来获取是否操作已成功执行。出于好奇,我还尝试在使用Foo时显式调用转换运算符:if(!func().operatorbool())//funcreturnedFoothrowstd::logic_error("operationwasnotsuccessful");效果很好。然后,我突然决定转储Foo类并使用简单的bool但我忘了删除.operatorbool()函数调用返回值。因此我发现了一组Vis

运算符的 C++ 链接 << for std::cout like usage

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:std::endlisofunknowntypewhenoverloadingoperatorOperatoroverloading我目前正在编写一个记录器类,但是operator方法导致编译器错误。这是该类的最小化版本,位于文件“logger.h”中:#includeclassLogger{public:Logger():m_file(std::cout){}templateLogger&operator它包含在我的main.cpp中,当我输出字符串文字时它可以完美地工作:log但是,下面的代码不会编译。#

c++ - 显式运算符 bool 错误

我得到CompilerErrorC2071当我尝试实现explicitoperatorbool时:classC{public:explicitoperatorbool()const{return!!*this;}};为什么?我该如何解决这个问题?我正在使用VisualStudio2012RC。 最佳答案 VisualStudio2012不支持显式转换运算符,请参阅C++11FeaturesinVisualC++11.这些文章讨论了safeboolidiom:http://www.artima.com/cppsource/safebo

c++ - 三元运算符中的 integral_constants

MSVC和clang/gcc对于是否可以在三元运算符中使用两个不同的整型常量(以及它们是否具有common_type)存在分歧:#includeintmain(){returnfalse?std::integral_constant():std::integral_constant();}上面的代码片段在clang和gcc中编译得很好,但在MSVC中却不行。根据标准,正确的行为是什么?如果是clang/gcc行为,那么用于推断这两种不同类型的公共(public)类型的转换序列是什么? 最佳答案 tldr;代码格式正确。条件表达式的类

c++ - 成员初始化列表中的条件运算符

假设我有这个类:classfoo{public:foo(){}foo(conststd::string&s):_s(s){}private:std::string_s;};它是另一个类的成员:classbar{public:bar(boolcondition):_f(condition?"gotostringconstructor":**gotoemptyctor**){}private:foo_f;};在bar的成员初始化列表中初始化_f时,我想根据选择调用foo的哪个构造函数条件。我可以用什么代替gotoemptyctor来完成这项工作?我想到了放foo(),还有别的办法吗?

c++ - 涉及临时对象的运算符重载决策顺序

考虑以下最小示例:#includeusingnamespacestd;classmyostream:publicostream{public:myostream(ostreamconst&other):ostream(other.rdbuf()){}};intmain(){cout在g++和VisualC++上的输出都是helloworldhelloworld0x4012a4写入临时对象的版本,myostream(cout),似乎更喜欢成员运算符ostream::operator,而不是免费运营商operator.对象是否有名称似乎有所不同。为什么会这样?我该如何防止这种行为?编辑:现

c++ - 声明对对象和赋值运算符的引用

我觉得这个问题很基础,可以在某个地方提出,但我似乎无法找到答案。假设我有这段代码://classmemberfunctionstd::mapmyMap;conststd::map&bar(){returnmyMap;}voidmyFunc(std::map&foo1){foo1=bar();std::map&foo2=bar();}我的理解是,如果我开始使用foo2,因为foo2是对与bar()返回的实例相同的实例的引用,所以我对foo2所做的任何操作都将反射(reflect)在myMap中。但是foo1呢?foo1是否获得了myMap的拷贝,或者它是否也指向与bar()返回的实例相同

c++ - 对运算符<< 的 undefined reference

我有一个常规类(不是模板)和一个私有(private)friend操作符它的声明是:std::ostream&operator在cpp文件中它的定义是:std::ostream&operator它正在被编译然后链接到使用它的主函数,但是当我使用它时我得到一个undefinedreference...然而,当我将定义添加到主cpp文件的顶部并删除友元声明时,它工作正常...这是我在主要功能中使用它的方式std::coutgetPosition()不多也不少...这是链接器错误/home/luke/Desktop/pathfinder/parse_world.cpp:34:undefine

c++ - 调用转换运算符

以下行为的原因是什么?classBoolWrapper{public:BoolWrapper(boolvalue):value(value){}operatorbool()const{returnvalue;}operatorint()const{return(int)value;}private:boolvalue;};BoolWrapperbw(true);if(bw){...}//invokesoperatorbool()if(bw==true){...}//invokesoperatorint()--why?这种行为是预期的吗?(使用GCC4.7.2。)